package com.yidu.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.aspectj.weaver.ast.Var;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.comment.Message;
import com.yidu.comment.Page;
import com.yidu.comment.Tools;
import com.yidu.dao.SnBomMapper;
import com.yidu.dao.SnCommodityMapper;
import com.yidu.model.SnBom;
import com.yidu.model.SnCommodity;
import com.yidu.model.SnProDetail;
import com.yidu.service.SnManufactureService;
import com.yidu.service.SnProDetailService;

/**
 * 生产详情表
 * @author chensituo
 * @date 2018年11月27日 上午12:45:27
 */
@Controller
@RequestMapping("/prodetail")
public class SnProDetailAction {
	/**
	 * 注入生产详情service
	 */
	@Resource
	SnProDetailService proDetailService;
	/**
	 * 注入制造计划的service
	 */
	@Resource
	SnManufactureService manufactureService;
	/**
	 * 注入物料清单
	 */
	@Resource
	SnBomMapper bomMapper;
	/**
	 * 注入商品mapper
	 */
	@Resource
	SnCommodityMapper commodityMapper;
	/**
	 * 根据生产订单id查询生产详情
	 * @param page 当前页数
	 * @param limit 每页行数
	 * @param proId 生产id
	 * @return 生产详情model
	 */
	@RequestMapping("findDuction")
	@ResponseBody
	public Map<String, Object> findDuction(String page,String limit,SnProDetail proDetail) {

		//得到分页工具类
		Page pages=new Page();
		//将数据封装
		pages.setCurPage(Integer.valueOf(page));
		pages.setRows(Integer.valueOf(limit));

		//创建一个map对象
		Map<String, Object> maps=new HashMap<>();
		maps.put("page", pages);
		maps.put("proDetail", proDetail);
		
		//调用根据生产订单id查询生产详情的方法
		List<SnProDetail> list=proDetailService.findDuction(maps);
		//调用查询行数的方法
		int count=proDetailService.findCount(maps);

		Map<String, Object> map = new HashMap<>();
		map.put("code", 0);
		map.put("msg", 0);
		map.put("count",count);
		//将list放入map中
		map.put("data", list);
		return map;
	}
	/**
	 * 确认保存根据选中的id修改数量
	 * @param arr 前台数据字符串
	 * @return 0 修改成功 1 修改失败
	 */
	@RequestMapping("updateNumber")
	@ResponseBody
	public Message updateNumber(String sum) {
		//将字符串根据@分割
		String [] arr=sum.split("@");
		int rows=0;
		
		Message message=new Message();
		//遍历数组
		for (String string : arr) {
			//将遍历之后的字符串根据，分割
			String[] str=string.split(",");
			
			//创建生产详情对象
			SnProDetail detail=new SnProDetail();
			//将id和总数量封装
			detail.setDeId(str[0]);
			detail.setDeNumber(Integer.valueOf(str[1]));
			
			//查询商品材料库存是否足够生产
			String stock=proDetailService.selectStock(str[1],str[2]);
			if(!"1".equals(stock)) {
				message.setState(2);
				message.setMsg(stock);
				return message;
			}else {
				System.err.println(str[0]+"___"+str[2]+"___"+str[1]);
				int a=manufactureService.addOrUpdate(str[0],str[2],str[1]);
				
				//调用根据id修改的方法
				rows=proDetailService.updateByPrimaryKeySelective(detail);
				message.setState(rows);
			}
		}
		return message;
	}
	/**
	 * 删除
	 * @param deId 生产详情id
	 * @return 0 删除失败 1 删除成功
	 */
	@RequestMapping("delete")
	@ResponseBody
	public int delete(String deId) {
		//调用根据id删除的方法
		return proDetailService.delete(deId);
	}
	/**
	 * 确认添加 增加商品详情表
	 * @param com 商品id字符串
	 * @param proId 生产计划id
	 * @return 0 增加失败 1 增加成功
	 */
	@RequestMapping("findAdd")
	@ResponseBody
	public Message findAdd(String com,String proId) {
		Message message=new Message();
		//根据生产订单id查询生产详情
		List<SnProDetail> list=proDetailService.findProId(proId);
		for (SnProDetail snProDetail : list) {
			snProDetail.setIsva(0);
			//调用修改的方法
			proDetailService.updateByPrimaryKeySelective(snProDetail);
		}
		String [] arr=com.split("@");
		int rows=1;
		for (String string : arr) {
			SnProDetail detail=new SnProDetail();
			detail.setProId(proId);
			detail.setComId(string);
			detail.setDeNumber(0);
			detail.setDeStocks(0);
			detail.setDeUndone(0);
			detail.setIsva(1);
			detail.setOptime(Tools.getCurDateTime());
			detail.setSort(Integer.valueOf(Tools.getTimeStamp()));
			detail.setDeState(1);
			detail.setDeCount(0);
			
			SnCommodity commodity=commodityMapper.selectByPrimaryKey(string);
			
			//根据商品id查询物料清单
			List<SnBom> list2=bomMapper.findByComId(string);
			if(list2.isEmpty()) {
				message.setState(2);
				message.setMsg("商品:"+commodity.getComName()+",没有物料清单");
				return message;
			}
			
			//根据商品id查询订单详情
			SnProDetail proDetail=proDetailService.selectProCom(detail);
			//如果为空
			if(proDetail==null || "".equals(proDetail.getDeId())) {
				detail.setDeId(Tools.getDateOrderNo());
				rows=proDetailService.insert(detail);
				message.setState(rows);
			}
			
		}
		return message;
	}
	/**
	 * 根据生产id查询生产详情
	 * @param proId 生产id
	 * @return 生产详情model
	 */
	@RequestMapping("findProId")
	@ResponseBody
	public List<SnProDetail> findProId(String proId){
		//调用根据生产id查询的方法
		return proDetailService.findProId(proId);
	}
	
}
